#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>


int main()
{
    int fd = open("log.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
    dup2(fd,1); // 让stdout指向fd
    printf("hello world\n");
    return 0;
}



// int main()
// {
//     //close(0);
//     //close(1);
//     close(2);
//     int fd = open("log.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//     if(fd == -1)
//     {
//         perror("open");
//         exit(1);
//     }
// 
//     printf("fd:%d\n", fd);
//     return 0;
// }



//int main()
//{
//    printf("stdin:%d\n",stdin->_fileno);
//    printf("stout:%d\n",stdout->_fileno);
//    printf("stderr:%d\n",stderr->_fileno);
//
//    umask(0);
//    int fd1 = open("log1.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666); // 指定权限 -rw- rw- rw-
//    int fd2 = open("log2.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666); // 指定权限 -rw- rw- rw-
//    int fd3 = open("log3.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666); // 指定权限 -rw- rw- rw-
//    int fd4 = open("log4.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666); // 指定权限 -rw- rw- rw-
//    printf("%d\n", fd1);
//    printf("%d\n", fd2);
//    printf("%d\n", fd3);
//    printf("%d\n", fd4);
//
//    close(fd1);
//    close(fd2);
//    close(fd3);
//    close(fd4);
//    return 0;
//}


//int main()
//{
//    umask(0);
//    int fd = open("log.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666);
//
//    const char* msg = "hello world\n";
//    int cnt = 5;
//    while(cnt)
//    {
//        write(fd, msg, strlen(msg));
//        cnt--;
//    }
//
//    close(fd);
//    return 0;
//}

// int main()
// {
//     umask(0);
//     int fd1 = open("log1.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666); // 指定权限 -rw- rw- rw-
//     int fd2 = open("log2.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666); // 指定权限 -rw- rw- rw-
//     int fd3 = open("log3.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666); // 指定权限 -rw- rw- rw-
//     int fd4 = open("log4.txt", O_CREAT | O_WRONLY | O_TRUNC, 0666); // 指定权限 -rw- rw- rw-
//     printf("%d\n", fd1);
//     printf("%d\n", fd2);
//     printf("%d\n", fd3);
//     printf("%d\n", fd4);
// 
//     close(fd1);
//     close(fd2);
//     close(fd3);
//     close(fd4);
// 
//     return 0;
// }


// #define ONE_FLAG 1
// #define TWO_FLAG 1<<1
// #define THREE_FLAG 1<<2
// #define FOUR_FLAG 1<<3
// 
// void func(int flags)
// {
//     if(flags & ONE_FLAG)
//     {
//         printf("one\n");
//     }
//     if(flags & TWO_FLAG)
//     {
//         printf("two\n");
//     }
//     if(flags & THREE_FLAG)
//     {
//         printf("three\n");
//     }
//     if(flags & FOUR_FLAG)
//     {
//         printf("four\n");
//     }
// }
// 
// int main()
// {
//     func(ONE_FLAG);
//     printf("\n");
//     func(ONE_FLAG | TWO_FLAG);
//     printf("\n");
//     func(ONE_FLAG | TWO_FLAG | THREE_FLAG);
//     printf("\n");
//     func(ONE_FLAG | TWO_FLAG | THREE_FLAG | FOUR_FLAG);
//     printf("\n");
//     return 0;
// }

// int main()
// {
//     printf("printf()\n");
//     std::cout << "cout" << std::endl;
// 
//     const char* msg = "hello world\n";
//     fwrite(msg, strlen(msg), 1, stdout);
// 
//     fprintf(stdout, "%s\n", msg);
//     return 0;
// }
